/**
 * File: Genetic.h
 *
 * Integrantes:
 * @author Jormar Arellano		(05-37840) <jormar.arellano@gmail.com>
 * @author Sabrina Fernandez	(05-38163) <sabrinamfm@gmail.com>
 */

#ifndef GENETIC_H
#define GENETIC_H

#include "arraylist.h"
#include "graph.h"
#include "population.h"

#include "util.h"

#ifdef _cplusplus
extern "C" {
#endif

int parent_num;			// Numero de cromosomas que continuaran.
int couple_num;			// Numero de cromosomas que se cruzaran.
int mutant_num;			// Numero de cromosomas que mutaran.
int genetic_Psize;      // Tamaño de la población inicial.
int genetic_Giter;      // Numero de iteraciones.
double genetic_MOperc;  // Porcentaje de los que siguen (move on).
double genetic_COperc;  // Porcentaje de los que se cruzan.
int firstPointCut;      // Primer punto de corte.
int secondPointCut;     // Segundo punto de corte.
int mutationPoint;      // Punto de mutacion.

/*
 * Valores por defecto
 */
void genetic_defaults();

/*
 * Calcula el valor de los cromosomas que hay.
 */
void getPopulationSize();

/*
 * Genera la poblacion inicial para un grafo
 */
Population *initial_population (Graph *graph);

/*
 * Algoritmo Genetico principal.
 */
Graph *genetic(Graph *graph);

#ifdef _cplusplus
}
#endif

#endif
